package com.hz;

import javax.servlet.*;
import java.io.IOException;
import java.io.InputStream;
import java.util.Enumeration;
import java.util.Properties;

public class HelloServlet implements Servlet{

	//Servlet生命周期方法，都是由Servlet容器负责调用
	//destroy只被调用一次，在当前Servlet所在的web应用被卸载前调用，用于释放当前Servlet所占的资源
	@Override
	public void destroy() {
		System.out.println("destroy");
	}

	@Override
	public ServletConfig getServletConfig() {
		System.out.println("getServletConfig");
		return null;
	}

	@Override
	public String getServletInfo() {
		System.out.println("getServletInfo");
		return null;
	}

	//init 只被调用一次，在创建好实例后立即被调用，用于初始化当前Servlet
	//ServletConfig封装了Servlet的配置信息，由tomcat实现，可以获取ServletContext对象
	//Servlet引擎为每个WEB应用程序都创建一个对应的ServletContext对象，ServletContext对象包含在ServletConfig对象中
	//ServletContext 对象代表当前WEB应用的一个大管家，可以获取各方面的信息
	@Override
	public void init(ServletConfig servletConfig) throws ServletException {
		System.out.println("init");

		//获取指定参数名的初始化参数的值，局部的，只能获取当前Servlet的初始化参数值
		String user = servletConfig.getInitParameter("user");
		System.out.println("user： " + user);

		//获取参数名组成的Enumeration对象
		Enumeration<String> names = servletConfig.getInitParameterNames();
		while(names.hasMoreElements()){
			String name = names.nextElement();
			String value = servletConfig.getInitParameter(name);
			System.out.println("^^" + name + ": " + value);
		}

		//获取web.xml中配置的Servlet 注册的名字
		String serlvetName = servletConfig.getServletName();
		System.out.println(serlvetName);

		//获取 ServletContext 对象
		ServletContext servletContext = servletConfig.getServletContext();

		//获取当前WEB应用的初始化参数，全局的，可以获取所有Servlet的初始化参数值
		String driver = servletContext.getInitParameter("driver");
		System.out.println("driver:" + driver);

		Enumeration<String> names2 = servletContext.getInitParameterNames();
		while(names2.hasMoreElements()){
			String name = names2.nextElement();
			System.out.println("-->" + name);
		}

		//获取当前WEB应用的某个文件的绝对路径，应用发布的路径
		String realPath = servletContext.getRealPath("/src/main/note.txt");
		//不是: D:\IdeaProjects\javaWeb\day_29\src\main\webapp\note.txt
		System.out.println(realPath); //D:\IdeaProjects\javaWeb\day_29\target\day_29\note.txt

		//获取当前WEB应用的名称
		String contextPath = servletContext.getContextPath();
		System.out.println(contextPath); ///day_29

		Properties pros = new Properties();

		try {
			ClassLoader classLoader = getClass().getClassLoader();
			InputStream is = classLoader.getResourceAsStream("jdbc.properties");
			System.out.println("1. " +  is);
			pros.load(is);

			System.out.println(pros.getProperty("name"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		pros = new Properties();
		try {
			//获取当前WEB应用的某一个文件对应的输入流，path的/ 是当前WEB应用的根目录
			InputStream is2 = servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
			System.out.println("2. " + is2);
			pros.load(is2);
			System.out.println(pros.getProperty("name"));
		} catch (Exception e) {
			e.printStackTrace();
		}

		String picPath = servletContext.getRealPath("/WEB-INF/lib");
		System.out.println(picPath);
	}

	//service 被多次调用，每次请求都会调用
	@Override
	public void service(ServletRequest arg0, ServletResponse arg1)
			throws ServletException, IOException {
		System.out.println("service");
	}

	//构造器只被调用一次，只有第一次请求Servlet时，创建Servlet实例，说明Servlet时单实例的
	public HelloServlet() {
		System.out.println("HelloServlet's constructor");
	}

}
